#  迭代器的一个优点就是它不要求你事先准备好整个迭代过程中所有的元素。
#
# 迭代器仅仅在迭代至某个元素时才计算该元素，而在这之前或之后，元素可以不存在或者被销毁。
#
# 这个特点使得它特别适合用于遍历一些巨大的或是无限的集合，比如几个G的文件，或是斐波那契数列等等。
#
# 这个特点被称为延迟计算或惰性求值(Lazy evaluation)。
def f(x):
    return x*x
#map()传入的第一个参数是f，即函数对象本身。由于结果r是一个Iterator，Iterator是惰性序列，因此通过list()函数让它把整个序列都计算出来并返回一个list。
r=map(f,[1,2,3,4])
print(list(r))

print(list(map(str,[1,2,3,4])))

def strFormate(strinfo):
    return  str(strinfo)+" |"

print(list(map(strFormate,[1,2,3,4])))

from functools import reduce
def add(x,y):
    return x+y
ret=reduce(add,[1,3,5,7,9])
print(ret)
